package com.yango.order.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yango.order.client.TeachClient;
import com.yango.order.client.UserClient;
import com.yango.order.entity.Order;
import com.yango.order.entity.vo.OrderQuery;
import com.yango.order.mapper.OrderMapper;
import com.yango.order.service.OrderService;
import com.yango.order.utils.OrderNoUtil;
import com.yango.serviceutil.vo.CourseFrontVo;
import com.yango.serviceutil.vo.MemberVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * <p>
 * 订单 服务实现类
 * </p>
 *
 * @author LiDingYin
 * @since 2021-08-04
 */
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {

    @Autowired
    private UserClient userClient;

    @Autowired
    private TeachClient teachClient;

    //根据课程id和用户id创建订单，返回订单id
    @Override
    public String createOrder(String courseId, String memberId) {
        //根据用户id查询用户信息
        MemberVo user = userClient.getUserInfo(memberId);
        //根据课程id查询课程信息
        CourseFrontVo course = teachClient.getCourse(courseId);
        //设置订单参数
        Order order = new Order();
        order.setOrderNo(OrderNoUtil.getOrderNo());//生成随机订单号
        order.setCourseId(courseId);//设置课程id
        order.setCourseTitle(course.getTitle());//课程名称
        order.setCourseCover(course.getCover());//课程封面
        order.setTeacherName(course.getTeacherName());//讲师名称
        order.setMemberId(memberId);//用户id
        order.setNickname(user.getNickname());//用户昵称
        order.setMobile(user.getMobile());//用户手机号
        order.setTotalFee(course.getPrice());//订单金额
        order.setPayType(1);//支付类型（1：微信  2：支付宝）
        order.setStatus(0);//订单状态（0：未支付  1：已支付）
        //调用方法添加到数据库
        baseMapper.insert(order);
        //返回订单号
        return order.getOrderNo();
    }

    //分页-条件查询所有订单
    @Override
    public void pageOrderList(Page<Order> page, OrderQuery orderQuery) {
        //条件构造器
        QueryWrapper<Order> wrapper = new QueryWrapper<>();
        //判断查询条件是否为空
        if (StringUtils.isEmpty(orderQuery)) {//查询条件为空
            baseMapper.selectPage(page, wrapper);//分页查询
            return;//代码不往下执行
        }
        //查询条件不为空
        //判断各个条件是否为空，拼接SQL
        if (!StringUtils.isEmpty(orderQuery.getOrderNo())) {//订单号不为空
            wrapper.eq("order_no", orderQuery.getOrderNo());
        }
        if (!StringUtils.isEmpty(orderQuery.getCourseTitle())) {//课程名称不为空
            wrapper.like("course_title", orderQuery.getCourseTitle());
        }
        if (!StringUtils.isEmpty(orderQuery.getNickname())) {//会员昵称不为空
            wrapper.like("nickname", orderQuery.getNickname());
        }
        //调用方法查询
        baseMapper.selectPage(page, wrapper);
    }
}
